The present invention concerns virtual memory systems in general and as they pertain to the way a computing system processor allows processes to access input/output (I/O) devices. In the prior art, each process running on a computer system has had its own virtual address space. This can lead to very complex systems and non-optimal performance. For instance, a separate page table needs to be kept for each process. A page table maps virtual memory addresses to physical locations in memory. Furthermore, if each process has its own virtual address space, each time processes are swapped in a computer, translation buffers and cache entries from the prior process must be invalidated.
Additionally, in prior art virtual memory systems, I/O devices have been accessed by one of two methods. In the first method, special instructions are provided within the computer instruction set which control I/O devices. In the second method, referred to as memory mapped I/O, certain addresses are reserved for each I/O device. The reserved addresses for each I/O device are called its address space. In memory mapped I/O systems, I/O devices detect and decode when a processor reads or writes to addresses within that I/O device's I/O address space. Each register within an I/O device is associated with an address within the address space. The registers are implemented in such a way that a read or a write to an address within an I/O device's address space results in a read or a write to a register within the I/O device associated with the specific address. The act of reading or writing to addresses within an I/O device address space can thus be used to control I/O devices.
One advantage of using memory mapped I/O systems is that I/O devices can be accessed by procedures implemented in a higher level language. In some prior art computer architectures, an application program is allowed to directly access all or a portion of the computer's I/O devices' address space. This, however, may lead to difficulties in a multi-tasking environment. For instance, if one application program misinitializes an I/O device which is able to perform direct memory access (DMA) transfers, this might cause the I/O device to read or write over memory space assigned to another application program, thus compromising system security.
Some prior art schemes, in order to avoid compromising system security in multi-tasking environments, prevent application programs from directly accessing the address spaces of I/O devices. Instead, all I/O addresses can be accessed only through privileged procedures called I/O drivers. This, while providing a high level of system security, nevertheless adds a lot of software overhead and is inefficient and restrictive.